var fs = require('fs');
var path = require('path');

readDir('./')

function readDir(filePath) {
  fs.readdir(filePath, (err, files) => {
    // 排除node_modules和dist目录以避免无限循环
    let fos = path.join(filePath, '').indexOf('node_modules') > -1 || path.join(filePath, '').indexOf('dist') > -1
    if (!fos) {
      files.forEach(fileName => {
        var filedir = path.join(filePath, fileName);
        fs.stat(filedir, (eror, stats) => {
          if (stats.isFile()) {
            if (filedir.indexOf('.html') > -1) {
              htmlSourceAddVersion(filedir)
            }
          } else if (stats.isDirectory()) {
            readDir(filedir)
          }
        })
      })
    }
  })
}

function htmlSourceAddVersion(filePath) {
  fs.readFile(filePath, 'utf8', (error, data) => {
    let timestamp = new Date().valueOf()
    let html = data.toString()
    // 先检查文件是否已经包含版本号，避免重复添加
    let hasVersion = html.match(/((\.css)|(\.js))(\?.*?)?(\")/g);
    if (hasVersion) {
      html = html.replace(/((\.css)|(\.js))(\?.*?)?(\")/g, `$1?v=${timestamp}$5`)
      // 将处理后的文件写入到dist目录而不是修改源文件
      let outputPath = path.join('./dist', path.relative('./', filePath));
      fs.writeFile(outputPath, html, 'utf8', (err, data) => { 
        if (err) {
          console.error('写入文件失败:', err);
        } else {
          console.log(outputPath, '--->  添加版本号成功');
        }
      })
    } else {
      // 如果没有需要添加版本号的链接，也复制文件到dist目录
      let outputPath = path.join('./dist', path.relative('./', filePath));
      fs.writeFile(outputPath, html, 'utf8', (err, data) => { 
        if (err) {
          console.error('写入文件失败:', err);
        } else {
          console.log(outputPath, '--->  文件复制成功');
        }
      })
    }
  })
}